package org.hishenframework.core.data.jdbc.template;

import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

public interface HishenJdbcTemplate<T> {
	/**
	 * 执行insert update delete 等语句
	 * @param sql
	 * @param values
	 * @return
	 */
	int update(String sql, Object... values);

	/**
	 * 获取int值
	 * @param sql
	 * @param values
	 * @return
	 */
	int queryForInt(String sql, Object... values);

	/**
	 * 获取long值
	 * @param sql
	 * @param values
	 * @return
	 */
	long queryForLong(String sql, Object... values);
	
	/**
	 * 获取一个实体
	 * @param sql
	 * @param entityClass
	 * @param values
	 * @return
	 */
	T queryForBean(String sql, Class<T> entityClass, Object... values);
	
	/**
	 * 获取一个实体
	 * @param sql
	 * @param values
	 * @return
	 */
	Map<String, Object> queryForMap(String sql, Object... values);
	
	/**
	 * 获取实体集合
	 * @param sql
	 * @param entityClass
	 * @param values
	 * @return
	 */
	List<T> queryForListBean(String sql, Class<T> entityClass, Object... values);
	
	/**
	 * 查询并一定数量的数据
	 * @param sql
	 * @param entityClass
	 * @param offset
	 * @param length
	 * @param values
	 * @return
	 */
	List<T> queryForListBean(long offset, long length, String sql, Class<T> entityClass, Object... values);
	
	/**
	 * 获取实体集合
	 * @param sql
	 * @param values
	 * @return
	 */
	List<Map<String, Object>> queryForListMap(String sql, Object... values);		
	
	/**
	 * 查询并一定数量的数据
	 * @param sql
	 * @param offset
	 * @param length
	 * @param values
	 * @return
	 */
	List<Map<String, Object>> queryForListMap(long offset, long length, String sql, Object... values);
	
	/**
	 * 查询并填充page
	 * @param page
	 * @param sql
	 * @param entityClass
	 * @param values
	 * @return
	 */
	void queryForDataPaging(DataPaging<T> dataPaging, String sql, Class<T> entityClass, Object... values);
	
	/**
	 * 查询并填充page
	 * @param page
	 * @param sql
	 * @param values
	 */
	void queryForDataPaging(DataPaging<Map<String, Object>> dataPaging, String sql, Object... values);
	
	/**
	 * 获取记录总数
	 * @param sql
	 * @param values
	 * @return
	 */
	long queryForCount(String sql, Object... values);
	
	/**
	 * 获取数据源
	 * @return
	 */
	DataSource getDataSource();
}
